package com.wei.czz.framework.blog.service;

import com.wei.czz.common.po.blog.BlogManageListPo;
import com.wei.czz.common.po.blog.UserIssueBlogListPo;
import com.wei.czz.common.po.blog.audit.BlogAuditListPo;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.blog.BlogManageFormVo;
import com.wei.czz.common.vo.blog.audit.BlogAuditFormVo;
import com.wei.czz.common.vo.blog.BlogFormVo;
import com.wei.czz.common.vo.blog.UserBlogFormVo;
import com.wei.czz.framework.blog.entity.BlogEntity;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:30:32
 * className: BlogService 博客基本信息操作请求服务接口
 * version: 1.0
 * description:
 */
public interface BlogService {

    /**
     * 保存博客操作
     * @param blog 博客对象
     */
    void insert(BlogEntity blog);

    /**
     * 分页查询博客缓存列表操作
     * @param blogFormVo 博客查询参数对象
     * @return 操作结果
     */
    Map<String, Object> getCacheBlogList(BlogFormVo blogFormVo);

    /**
     * 根据博客id，获取博客基本信息
     * @param id  博客主键
     * @return 博客基本信息
     */
    BlogEntity getBlog(Long id);

    /**
     * 批量获取博客操作
     * @param idList 博客主键列表
     * @return 博客列表
     */
    List<BlogEntity> getBlogList(List<Long> idList);

    /**
     * 获取所有博客操作
     * @return 博客列表
     */
    List<BlogEntity> getBlogList();

    /**
     * 获取空间关联博客操作
     * @param spaceIdList 空间主键列表
     * @return 博客列表
     */
    List<BlogEntity> getSpaceBlogList(List<Long> spaceIdList);

    /**
     * 获取用户博客分页数据操作
     * @param formVo 参数对象
     * @return 博客分页数据对象
     */
    PageDto<BlogEntity> getUserBlogPageList(UserBlogFormVo formVo);

    /**
     * 获取用户已发布博客分页数据操作
     * @param formVo 参数对象
     * @return 博客分页数据对象
     */
    PageDto<UserIssueBlogListPo> getUserIssueBlogPageList(UserBlogFormVo formVo);

    /**
     * 分页获取博客审核记录数据操作
     * @param formVo 参数对象
     * @return 博客审核记录分页数据对象
     */
    PageDto<BlogAuditListPo> getAuditPageList(BlogAuditFormVo formVo);

    /**
     * 分页获取博客管理列表数据操作
     * @param blogManageFormVo 参数对象
     * @return 博客管理列表分页数据对象
     */
    PageDto<BlogManageListPo> getManageBlogPageList(BlogManageFormVo blogManageFormVo);

    /**
     * 修改博客操作
     * @param blog 博客对象
     */
    void edit(BlogEntity blog);

    /**
     * 根据博客id，修改博客的浏览数量
     * @param blogId       博客id
     * @param num          博客浏览量变化大小
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogViewNum(Long blogId, Integer num, Date updateTime, Long updateUserId);

    /**
     * 根据博客id，修改博客的点赞数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，点赞数加一。val为-1时，点赞数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogLikeNum(Long blogId, Integer num, Date updateTime, Long updateUserId);

    /**
     * 根据博客id，修改博客的被收藏数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，收藏数加一。val为-1时，收藏数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCollectNum(Long blogId, Integer num, Date updateTime, Long updateUserId);

    /**
     * 根据博客id，修改博客的被评论数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，评论数加一。val为-1时，评论数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCommentNum(Long blogId, Integer num, Date updateTime, Long updateUserId);

    /**
     * 删除博客操作
     * @param idList 博客主键列表
     */
    void deleteBlog(List<Long> idList);

}

